// node 10_变量查找过程的理解.js

function Foo() {
    //定义了一个类变量A
    Foo.A = function () {   //当被初始化时覆盖外部同名类变量
        console.log("1,类变量A")
    }
    Foo.B = function () {   //当被初始化时覆盖外部同名类变量
        console.log("1,类变量B")
    }
    //定义了一个实例变量A,每个实例独有一份
    this.A = function () {
        console.log("2,实例变量A")
    }
}
//在Foo的原型上定义了一个变量A,所有实例共享
Foo.prototype.A = function () {
    console.log("3,原型变量A")
}
//在外部给Foo定义了一个类变量A
Foo.A = function () {
    console.log("4,类变量A")
}

Foo.A()                   //输出4,因为方法体还没有被执行
let objA = new Foo()      //实例化，内部类变量覆盖外部同名类变量
objA.A()                  //输出2,查找过程: 实例内部查找(this绑定) -> 在原型链上查找
Foo.A()                   //输出1
// objA.B()               //报错，实例无法访问类本身的变量